/*
Copyright © 2022 NAME HERE <EMAIL ADDRESS>

*/
package main

import (
	"gitee.com/lys_billy/bpf-map/cmd"
)

//import "gitee.com/lys_billy/bpf-map/cmd"
// type TestKey struct {
// 	Key uint32
// }
// type TestValue struct {
// 	Value uint32
// }
// type BPFPrivilegedTestSuite struct{}

// func (k *TestKey) String() string             { return fmt.Sprintf("key=%d", k.Key) }
// func (k *TestKey) GetKeyPtr() unsafe.Pointer  { return unsafe.Pointer(k) }
// func (k *TestKey) NewValue() bpf.MapValue     { return &TestValue{} }
// func (k *TestKey) DeepCopyMapKey() bpf.MapKey { return &TestKey{k.Key} }

// func (v *TestValue) String() string                 { return fmt.Sprintf("value=%d", v.Value) }
// func (v *TestValue) GetValuePtr() unsafe.Pointer    { return unsafe.Pointer(v) }
// func (v *TestValue) DeepCopyMapValue() bpf.MapValue { return &TestValue{v.Value} }

// var (
// 	maxEntries = 16
// 	testMap    = bpf.NewMap("cilium_test",
// 		bpf.MapTypeHash,
// 		&TestKey{},
// 		int(unsafe.Sizeof(TestKey{})),
// 		&TestValue{},
// 		int(unsafe.Sizeof(TestValue{})),
// 		maxEntries,
// 		bpf.BPF_F_NO_PREALLOC,
// 		0,
// 		bpf.ConvertKeyValue,
// 	).WithCache()
// )

func main() {
	cmd.Execute()
	//bpf.CheckOrMountFS("")
	// if err := rlimit.RemoveMemlock(); err != nil {
	// 	fmt.Errorf("Failed to configure rlimit")
	// }
	// testMap, err1 := bpf.OpenMap("cilium_test")
	// testMap.OpenOrCreate()
	// if err1 == nil {
	// 	var nextKey = TestKey{}
	// 	var key = TestKey{}
	// 	for {
	// 		err := bpf.GetNextKey(testMap.GetFd(), unsafe.Pointer(&key), unsafe.Pointer(&nextKey))
	// 		if err != nil {
	// 			break
	// 		}
	// 		key = nextKey
	// 		value, _ := testMap.Lookup(&nextKey)
	// 		fmt.Print("\tkey:", nextKey)
	// 		fmt.Print("\tvalue:", value)
	// 		fmt.Println("")
	// 	}
	// }
	//key1 := &TestKey{Key: 101}
	// value1 := &TestValue{Value: 201}
	// key2 := &TestKey{Key: 102}
	// value2 := &TestValue{Value: 202}
	// err = testMap.Update(key1, value1)
	// err = testMap.Update(key2, value2)

	// value, _ := testMap.Lookup(key1)
	// fmt.Println("value1:", value)

	// value, err = testMap.Lookup(key2)
	// fmt.Println("value2:", value)
	// defer func() {
	// 	path, _ := testMap.Path()
	// 	os.Remove(path)
	// }()
	// defer testMap.Close()
}
